package sample.cluster.trans2;

import akka.actor.ActorRef;
import akka.actor.ActorSelection;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.util.Timeout;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import scala.concurrent.ExecutionContext;
import scala.concurrent.duration.Duration;
import scala.concurrent.duration.FiniteDuration;

import java.util.concurrent.TimeUnit;

import static akka.pattern.Patterns.ask;

public class TransformationOtherMain {

    public static void main(String[] args) {
        // Override the configuration of the port when specified as program argument
        final String port = args.length > 0 ? args[0] : "0";
        final Config config = ConfigFactory.parseString("akka.remote.netty.tcp.port=" + port).
                withFallback(ConfigFactory.parseString("akka.cluster.roles = [frontend1]")).
                withFallback(ConfigFactory.load());

        ActorSystem system = ActorSystem.create("ClusterSystem", config);

        final ActorRef otherActor = system.actorOf(
                Props.create(OtherActor.class), "otherActor");
        final FiniteDuration interval = Duration.create(2, TimeUnit.SECONDS);
        final Timeout timeout = new Timeout(Duration.create(5, TimeUnit.SECONDS));
        final ExecutionContext ec = system.dispatcher();

        ActorSelection selection = system.actorSelection("akka.tcp://ClusterSystem@127.0.0.1:2553"+"/user/frontend");
        selection.tell("start",otherActor);

        system.scheduler().schedule(interval, interval, new Runnable() {
            public void run() {
//                ask(frontend, new TransformationJob("hello-" + counter.incrementAndGet()), timeout)
//                        .onSuccess(new OnSuccess<Object>() {
//                    public void onSuccess(Object result) {
//                        frontend.tell(result, frontend);
//                    }
//                }, ec);
                ask(otherActor, "from other", timeout);
            }

        }, ec);
    }
}
